package br.com.bacabeleireiros.sysbeleza.service.impl;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.bacabeleireiros.sysbeleza.dao.ICaixaMovimentoAgendaDAO;
import br.com.bacabeleireiros.sysbeleza.dao.ICaixaMovimentoVendaProdutoDAO;
import br.com.bacabeleireiros.sysbeleza.dao.IPagamentoDAO;
import br.com.bacabeleireiros.sysbeleza.entity.Agenda;
import br.com.bacabeleireiros.sysbeleza.entity.CaixaMovimento;
import br.com.bacabeleireiros.sysbeleza.entity.CaixaMovimentoAgenda;
import br.com.bacabeleireiros.sysbeleza.entity.CaixaMovimentoVendaProduto;
import br.com.bacabeleireiros.sysbeleza.entity.FormaPagamento;
import br.com.bacabeleireiros.sysbeleza.entity.VendaProduto;
import br.com.bacabeleireiros.sysbeleza.service.IPagamentoService;

@Service("pagamentoService")
public class PagamentoServiceImpl implements IPagamentoService, Serializable {

	private static final long serialVersionUID = 1L;
	@Autowired
	private IPagamentoDAO dao;
	@Autowired
	private ICaixaMovimentoAgendaDAO caixaMovimentoAgendaDao;	
	
	@Autowired
	private ICaixaMovimentoVendaProdutoDAO caixaMovimentoVendaProdutoDao;		

	public PagamentoServiceImpl() {
		
	}

	@Override
	@Transactional
	public void efetuaPagamentoCaixaMovimento(List<Agenda> pagamentosSelecionados, double valorTotalServicoSelecionado, 
			                                  List<VendaProduto> vendasSelecionadas, double valorTotalVendaSelecionado,
			                                  Long idCaixa, FormaPagamento formaPagamento) {
		CaixaMovimento caixaMovimento;

		if (valorTotalServicoSelecionado > 0) {
			caixaMovimento = new CaixaMovimento();		
			caixaMovimento.setDataCaixa(new Date());
			caixaMovimento.getUsuario().setIdUsuario(1L);
			caixaMovimento.setValor(valorTotalServicoSelecionado);
			caixaMovimento.getCaixa().setIdCaixa(idCaixa); 
			caixaMovimento.getFormaPagamento().setIdFormaPagamento(formaPagamento.getIdFormaPagamento());
			caixaMovimento = dao.efetuaPagamentoCaixaMovimento(caixaMovimento);
			
			for (Agenda a : pagamentosSelecionados) {
				CaixaMovimentoAgenda caixaMovimentoAgenda = new CaixaMovimentoAgenda();
				caixaMovimentoAgenda.setAgenda(a);
				caixaMovimentoAgenda.setCaixaMovimento(caixaMovimento);
				caixaMovimentoAgenda = caixaMovimentoAgendaDao.relacionaPagamentos(caixaMovimentoAgenda);
			}
		}
		
		if (valorTotalVendaSelecionado > 0) {
			caixaMovimento = new CaixaMovimento();
			caixaMovimento.setDataCaixa(new Date());
			caixaMovimento.getUsuario().setIdUsuario(1L);
			caixaMovimento.getTipoCaixaMovimento().setIdTipoCaixaMovimento(2L);
			caixaMovimento.setValor(valorTotalVendaSelecionado);
			caixaMovimento.getCaixa().setIdCaixa(idCaixa);
			caixaMovimento.getFormaPagamento().setIdFormaPagamento(formaPagamento.getIdFormaPagamento());
			caixaMovimento = dao.efetuaPagamentoCaixaMovimento(caixaMovimento);		
			
			for (VendaProduto v : vendasSelecionadas) {
				CaixaMovimentoVendaProduto caixaMovimentoVendaProduto = new CaixaMovimentoVendaProduto();
				caixaMovimentoVendaProduto.setVendaProduto(v);
				caixaMovimentoVendaProduto.setCaixaMovimento(caixaMovimento);
				caixaMovimentoVendaProduto = caixaMovimentoVendaProdutoDao.relacionaPagamentos(caixaMovimentoVendaProduto);
			}
		}
	}

}
